package co.eam.edu.proyecto_final_empresa.web.seguridad;

import java.io.Serializable;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;




import co.eam.edu.proyecto_final_empresa.persistencia.entidades.Persona;
import co.eam.edu.proyecto_final_empresa.servicios.PersonaEJB;
import co.eam.edu.proyecto_final_empresa.web.controladores.BeanComun;

/**
 * Bean de sesion para controlar todo lo relacionado con la sesion.
 * 
 * @author Hogar
 * 
 */
@ManagedBean
@SessionScoped
public class SesionBean extends BeanComun implements Serializable {

	/**
	 * Constante de serializacion.
	 */
	private static final long serialVersionUID = 1L;
	
	/**
	 * nombre de usuario en el logimn
	 */
	private String usuario;
	/**
	 * password del usuario en el login..
	 */
	private String password;

	/**
	 * Usuario en sesion.....
	 */
	private Persona persona;
	/**
	 * Periodo lectivo actual-
	 */
	private String periodoLectivo;

	/**
	 * EJB de la persona
	 */
	@EJB
	private PersonaEJB personaEJB;
	
	
	
	/**
	 * inicilaizcion.
	 */
	@PostConstruct
	public void inicializar(){
	}

	/**
	 * Metodo para login.
	 */
	public String login() {

		Persona persona = personaEJB.buscarPersonaPorLogin(usuario);

		if (persona != null && persona.getPassword().equals(password)) {
			this.persona = persona;
			agregarASesion("persona", persona);
			return "/secured/" + getRol() + "/inicio.jsf?faces-redirect=true";
		} else {
			agregarMensaje("Login o Password incorrectos, intente de nuevo",
					FacesMessage.SEVERITY_ERROR);
			return null;
		}

	}

	/**
	 * Metodo para cerrar la sesion...
	 */
	public String logOut() {

		((HttpSession) FacesContext.getCurrentInstance().getExternalContext()
				.getSession(true)).invalidate();
		persona = null;
		return "/index.xhtml?faces-redirect=true";
	}

	/**
	 * 
	 * Metodo para ir al inicio.
	 * 
	 * @author Hogar <correo@gmail.com>
	 * @version 1.0 Fecha:6/04/2014
	 */
	public String irAInicio() {
		return  "/secured/" + getRol() + "/inicio.jsf?faces-redirect=true";
	}
	
	
	

	/**
	 * MEtodo que indica si hay sesion activa..
	 * 
	 * @return true si hay sesion.
	 */
	public boolean haySesion() {
		return persona != null;
	}

	/**
	 * MEtodo para determinar el rol de la persona en sesion.
	 * 
	 * @return
	 */
	public String getRol() {

		if (persona != null) {
			return persona.getClass().getSimpleName().toLowerCase();
		} else {
			return "";
		}

	}

	/**
	 * @return the usuario
	 */
	public String getUsuario() {
		return usuario;
	}

	/**
	 * @param usuario
	 *            the usuario to set
	 */
	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}

	/**
	 * @return the password
	 */
	public String getPassword() {
		return password;
	}

	/**
	 * @return the persona
	 */
	public Persona getPersona() {
		return persona;
	}

	/**
	 * @param persona
	 *            the persona to set
	 */
	public void setPersona(Persona persona) {
		this.persona = persona;
	}

	/**
	 * @param password
	 *            the password to set
	 */
	public void setPassword(String password) {
		this.password = password;
	}

	/**
	 * @return the periodoLectivo
	 */
	public String getPeriodoLectivo() {
		return periodoLectivo;
	}

	/**
	 * @param periodoLectivo the periodoLectivo to set
	 */
	public void setPeriodoLectivo(String periodoLectivo) {
		this.periodoLectivo = periodoLectivo;
	}

}
